1e8902
@@ -204,7 +204,7 @@
public class LocalEjbReceiver extends EJBReceiver {
                             result = view.invoke(interceptorContext);
                         } catch (Exception e) {
                             // WFLY-4331 - clone the exception of an async task
-                            receiverContext.resultReady(new CloningExceptionProducer(resultCloner, e));
+                            receiverContext.resultReady(new CloningExceptionProducer(resultCloner, e, allowPassByReference));
                             return;
                         }
                         // if the result is null, there is no cloning needed
@@ -225,7 +225,7 @@
public class LocalEjbReceiver extends EJBReceiver {
                                     intr = true;
                                 } catch (ExecutionException e) {
                                     // WFLY-4331 - clone the exception of an async task
-                                    receiverContext.resultReady(new CloningExceptionProducer(resultCloner, e));
+                                    receiverContext.resultReady(new CloningExceptionProducer(resultCloner, e, allowPassByReference));
                                     return;
                                 }
                             } finally {
@@ -267,7 +267,7 @@
public class LocalEjbReceiver extends EJBReceiver {
             } catch (Exception e) {
                 //we even have to clone the exception type
                 //to make sure it matches
-                receiverContext.resultReady(new CloningExceptionProducer(resultCloner, e));
+                receiverContext.resultReady(new CloningExceptionProducer(resultCloner, e, allowPassByReference));
                 return;
             }
             receiverContext.resultReady(new CloningResultProducer(invocation, resultCloner, result, allowPassByReference));
@@ -309,14 +309,16 @@
public class LocalEjbReceiver extends EJBReceiver {
     static final class CloningExceptionProducer implements EJBReceiverInvocationContext.ResultProducer {
         private final ObjectCloner resultCloner;
         private final Exception exception;
+        private final boolean allowPassByReference;
 
-        CloningExceptionProducer(final ObjectCloner resultCloner, final Exception exception) {
+        CloningExceptionProducer(final ObjectCloner resultCloner, final Exception exception, final boolean allowPassByReference) {
             this.resultCloner = resultCloner;
             this.exception = exception;
+            this.allowPassByReference = allowPassByReference;
         }
 
         public Object getResult() throws Exception {
-            throw (Exception) LocalEjbReceiver.clone(resultCloner, exception);
+            throw (Exception) LocalEjbReceiver.clone(Exception.class, resultCloner, exception, allowPassByReference);
         }
 
         public void discardResult() {
